從 C 風格的宏轉向 C++ 的類型安全字面量,代表了語言可用性的一次根本性轉變,解決了 「NULL 陷阱」 零宏歧義導致靜默邏輯錯誤的問題。
1. 函數重載解析失敗
在舊版標準(C++98)中, NULL 通常定義為 0。當傳遞給重載函數時,編譯器將其解析為整數。這可由以下程式碼證實: NULL 作為整數。這可由以下程式碼證實:
if (std::is_same<decltype(NULL), decltype(0)>::value)
std::cout << "NULL 是整數";
std::cout << "NULL 是整數";
2. nullptr 解決方案
C++11 引入了 nullptr,一個類型為 std::nullptr_t的關鍵字。與宏不同,它無法被隱式轉換為整數類型(僅允許轉換為 bool),確保只選擇針對指針的重載函數。
3. 連結與互操作性
現代 C++ 需要 extern "C" 以防止與 C 程式碼連結時發生名稱混淆(例如使用 gcc編譯)。在此邊界維持類型安全的指針至關重要。
$$\text{std::nullptr\_t} \neq \text{int}$$
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>